甚麼是 Model:
Odoo 的 model 有自己的一套 ORM 操作 PostgeSQL 的方法,Model定義好後、Odoo會更新db內的table資料或新增,一個 model 裡面基本含有 名稱、繼承、參數、計算跟約束。
Model 的種類和使用 :
+ Model : 最常使用的類型,在安裝 addons 時,會對應 Model 產生表和欄位,一般沒有特殊需求就會宣告成這 種類型
+ Base Model : MetaModel 的子類,是 Abstract Model 跟 Transient Model 和 Model 的父類。
+ Transient Model : 產生資料作為臨時資料使用(臨時資料),且一段時間後 Odoo 會自動清除,一般用來建立 wizard
+ MetaModel : 主要作用是註冊每個模塊中的模型
+ Abstract Model : 最原本的 BaseModel ,不會新增及儲存資料,透過繼承其他 Model 來新增功能。
(今天先介紹第一種,也是最基本的Model)
範例:
from odoo import models, fields
class Employee(models.Model):
_name = 'res.employee'
_description = 'Employee Information'
_order = 'birthday'
name = fields.Char(string='Name', required=True)
birthday = fields.Date(string='Birthday')
email = fields.Char(string='Email')
parent_id = fields.Many2one('res.partner', string='Parent')
address = fields.Text(string='Address')
_sql_constraints = [
('unique_email', 'unique(email)', 'Email must be unique')
]
Model 屬性 :
+ _name : 模型的名稱,同時也會用來建立對應的資料表。名稱中使用點(.)分隔不同的部分,例如 res.student 將建立一個名為「res_student」的資料表。若名稱為空,則會在繼承的原始資料表中 添加欄位。
+ _inherit : 此參數表示要繼承的模型名稱,例如你提到的範例是繼承了 res_partner 模型。
+ _inherits : 使用特定的欄位來繼承原始資料表,通常是透過 id 欄位來參考回原始表。
+ _description : 對模型的描述,可以用來提供有關此模型的簡短說明。
+ _table : 此模型所產生的資料表的名稱,通常情況下不需要額外設定,系統會自動根據 _name 來生成對應 的資料表名稱。
+ _order : 指定用於排序的欄位,例如填入 birthday 時,在查看資料時會按照學生的生日進行排序。若未指 定,預設會按照 id 進行排序。
+ _sql_constraints : 指定 SQL 約束 [( name , 約束 , 訊息 )]
+ _rec_name : 標籤名稱
+ _parent_name : 父級自段 Many2one 自段用作為父自段
+ _parent_store : 是否儲存父級路徑
明天繼續介紹 Model Field 類型 跟 Field 常用參數